home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 7: Programming / CDAT7.iso / demos / VisualAge for Java 2.0 Entry / setup / data1.cab / ide-e / IDE / cache / P4UD5V (.txt) < prev    next >
Encoding:
Java Class File  |  1998-09-16  |  2.6 KB  |  88 lines

  1. package java.beans;
  2.  
  3. import java.io.IOException;
  4. import java.io.ObjectInputStream;
  5. import java.io.ObjectOutputStream;
  6. import java.io.Serializable;
  7. import java.util.Vector;
  8.  
  9. public class PropertyChangeSupport implements Serializable {
  10.    private transient Vector listeners;
  11.    private Object source;
  12.    private int propertyChangeSupportSerializedDataVersion = 1;
  13.  
  14.    public PropertyChangeSupport(Object sourceBean) {
  15.       this.source = sourceBean;
  16.    }
  17.  
  18.    public synchronized void addPropertyChangeListener(PropertyChangeListener listener) {
  19.       if (this.listeners == null) {
  20.          this.listeners = new Vector();
  21.       }
  22.  
  23.       this.listeners.addElement(listener);
  24.    }
  25.  
  26.    public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
  27.       if (oldValue == null || !oldValue.equals(newValue)) {
  28.          Vector targets;
  29.          synchronized(this) {
  30.             if (this.listeners == null) {
  31.                return;
  32.             }
  33.  
  34.             targets = (Vector)this.listeners.clone();
  35.          }
  36.  
  37.          PropertyChangeEvent evt = new PropertyChangeEvent(this.source, propertyName, oldValue, newValue);
  38.  
  39.          for(int i = 0; i < targets.size(); ++i) {
  40.             PropertyChangeListener target = (PropertyChangeListener)targets.elementAt(i);
  41.             target.propertyChange(evt);
  42.          }
  43.  
  44.       }
  45.    }
  46.  
  47.    private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException {
  48.       s.defaultReadObject();
  49.  
  50.       Object listenerOrNull;
  51.       while((listenerOrNull = s.readObject()) != null) {
  52.          this.addPropertyChangeListener((PropertyChangeListener)listenerOrNull);
  53.       }
  54.  
  55.    }
  56.  
  57.    public synchronized void removePropertyChangeListener(PropertyChangeListener listener) {
  58.       if (this.listeners != null) {
  59.          this.listeners.removeElement(listener);
  60.       }
  61.    }
  62.  
  63.    private void writeObject(ObjectOutputStream s) throws IOException {
  64.       s.defaultWriteObject();
  65.       Vector v = null;
  66.       synchronized(this){}
  67.  
  68.       try {
  69.          if (this.listeners != null) {
  70.             v = (Vector)this.listeners.clone();
  71.          }
  72.       } catch (Throwable var6) {
  73.          throw var6;
  74.       }
  75.  
  76.       if (v != null) {
  77.          for(int i = 0; i < v.size(); ++i) {
  78.             PropertyChangeListener l = (PropertyChangeListener)v.elementAt(i);
  79.             if (l instanceof Serializable) {
  80.                s.writeObject(l);
  81.             }
  82.          }
  83.       }
  84.  
  85.       s.writeObject((Object)null);
  86.    }
  87. }
  88.